package java0408;

public class Solution {

    // 寻找旋转排序数组中的最小值
    // 已知一个长度为 n 的数组，预先按照升序排列，经由 1 到 n 次 旋转 后，得到输入数组。例如，原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到：
    //若旋转 4 次，则可以得到 [4,5,6,7,0,1,2]
    //若旋转 4 次，则可以得到 [0,1,2,4,5,6,7]
    //注意，数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。
    //
    //给你一个元素值 互不相同 的数组 nums ，它原来是一个升序排列的数组，并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
    public int findMin(int[] nums) {
        int i = 0;
        int j = i + 1;
        while (true) {
            if (i >= nums.length) {
                i = 0;
            }
            if (j >= nums.length) {
                j = 0;
            }
            if (nums[i] >= nums[j]) {
                return nums[j];
            }
            i++;
            j++;
        }
    }

    // 删除排序数组中的重复项
    // 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。
    //
    //不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
    public int removeDuplicates(int[] nums) {
        int slow = 0;
        boolean flag = false;
        for (; slow + 1 < nums.length; slow++) {
            flag = false;
            for (int fast = slow + 1; fast < nums.length; fast++) {
                if (nums[fast] > nums[slow]) {
                    nums[slow + 1] = nums[fast];
                    flag = true;
                    break;
                }
            }
            if (nums[slow + 1] == nums[nums.length - 1]) {
                break;
            }
        }
        if (flag == false) {
            return slow + 1;
        }
        return slow + 1 + 1;
    }

    // 移动零
    // 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
    public void moveZeroes(int[] nums) {
        int slow = 0;
        for (; slow < nums.length; slow++) {
            if (nums[slow] == 0) {
                for (int fast = slow + 1; fast < nums.length; fast++) {
                    if (nums[fast] != 0) {
                        int tmp = nums[slow];
                        nums[slow] = nums[fast];
                        nums[fast] = tmp;
                        break;
                    }
                }
            }
        }
    }

}
